package domain;

import java.util.HashMap;

import domain.AcumuladorDeDatos;

public aspect ContadorLlamadasAspect {

	HashMap<Object, AcumuladorDeDatos> lasPersonas = new HashMap<Object, AcumuladorDeDatos>();

	pointcut losMetodos(): call(@Monitored * *(..));

	before(): losMetodos()		
			{
		Object persona = thisJoinPoint.getTarget();
		String metodo = thisJoinPoint.getSignature().getName();

		if (this.lasPersonas.containsKey(persona)) {
			AcumuladorDeDatos losDatos = this.lasPersonas.get(persona);
			losDatos.agregarDato(metodo);
		} else {
			AcumuladorDeDatos nuevoDato = new AcumuladorDeDatos();
			nuevoDato.agregarDato(metodo);
			this.lasPersonas.put(persona, nuevoDato);
		}
	}

	public int cantLlamadas(Object persona, String metodo) {
		if (this.lasPersonas.containsKey(persona)) {
			return lasPersonas.get(persona).retornarElDato(metodo);
		} else {
			return 0;
		}
	}
}